#include <string>
#include <cmath>
#include "constants.h"
#include "orbitvirtualmachine.h"

void OVMBin3::nextCompiledStep()
{   m_index = 0;
    m_index = 1;
    sCopy( 0, 410);
    m_index = 2;
    m_index = 3;
    m_index = 4;
    sCopy( 0, 389);
    m_index = 5;
    dSub( 4, 3);
    m_index = 6;
    sCmpz( 2, 5);
    m_index = 7;
    dPhi( 2, 1);
    m_index = 8;
    dSub( 7, 0);
    m_index = 9;
    sCopy( 0, 408);
    m_index = 10;
    sCmpz( 2, 5);
    m_index = 11;
    dPhi( 0, 9);
    m_index = 12;
    dSub( 11, 0);
    m_index = 13;
    sCmpz( 2, 12);
    m_index = 14;
    dPhi( 8, 7);
    m_index = 15;
    m_index = 16;
    sCopy( 0, 409);
    m_index = 17;
    m_index = 18;
    sCmpz( 2, 5);
    m_index = 19;
    dPhi( 17, 16);
    m_index = 20;
    dMult( 19, 15);
    m_index = 21;
    sCmpz( 2, 12);
    m_index = 22;
    dPhi( 20, 19);
    m_index = 23;
    sCmpz( 2, 12);
    m_index = 24;
    dPhi( 19, 12);
    m_index = 25;
    sCopy( 0, 406);
    m_index = 26;
    sCopy( 0, 401);
    m_index = 27;
    m_index = 28;
    m_index = 29;
    m_index = 30;
    sInput( 0, 16000);
    m_index = 31;
    dSub( 30, 29);
    m_index = 32;
    sCmpz( 2, 31);
    m_index = 33;
    dPhi( 28, 3);
    m_index = 34;
    m_index = 35;
    dSub( 30, 34);
    m_index = 36;
    sCmpz( 2, 35);
    m_index = 37;
    dPhi( 27, 33);
    m_index = 38;
    m_index = 39;
    m_index = 40;
    dSub( 30, 39);
    m_index = 41;
    sCmpz( 2, 40);
    m_index = 42;
    dPhi( 38, 37);
    m_index = 43;
    m_index = 44;
    dSub( 30, 43);
    m_index = 45;
    sCmpz( 2, 44);
    m_index = 46;
    dPhi( 27, 42);
    m_index = 47;
    sCmpz( 2, 5);
    m_index = 48;
    dPhi( 46, 26);
    m_index = 49;
    sCopy( 0, 391);
    m_index = 50;
    sCmpz( 2, 5);
    m_index = 51;
    dPhi( 3, 49);
    m_index = 52;
    dSub( 51, 48);
    m_index = 53;
    dMult( 52, 52);
    m_index = 54;
    sCopy( 0, 400);
    m_index = 55;
    sCmpz( 2, 31);
    m_index = 56;
    dPhi( 27, 3);
    m_index = 57;
    m_index = 58;
    sCmpz( 2, 35);
    m_index = 59;
    dPhi( 57, 56);
    m_index = 60;
    m_index = 61;
    sCmpz( 2, 40);
    m_index = 62;
    dPhi( 60, 59);
    m_index = 63;
    sCmpz( 2, 44);
    m_index = 64;
    dPhi( 28, 62);
    m_index = 65;
    sCmpz( 2, 5);
    m_index = 66;
    dPhi( 64, 54);
    m_index = 67;
    sCopy( 0, 390);
    m_index = 68;
    sCmpz( 2, 5);
    m_index = 69;
    dPhi( 3, 67);
    m_index = 70;
    dSub( 69, 66);
    m_index = 71;
    dMult( 70, 70);
    m_index = 72;
    dAdd( 71, 53);
    m_index = 73;
    sSqrt( 0, 72);
    m_index = 74;
    dMult( 73, 73);
    m_index = 75;
    dMult( 74, 73);
    m_index = 76;
    m_index = 77;
    sCopy( 0, 392);
    m_index = 78;
    m_index = 79;
    sCmpz( 2, 5);
    m_index = 80;
    dPhi( 78, 77);
    m_index = 81;
    dMult( 76, 80);
    m_index = 82;
    dDiv( 81, 75);
    m_index = 83;
    dMult( 52, 82);
    m_index = 84;
    dDiv( 0, 0);
    m_index = 85;
    dMult( 84, 84);
    m_index = 86;
    dDiv( 85, 15);
    m_index = 87;
    dMult( 83, 86);
    m_index = 88;
    sCopy( 0, 404);
    m_index = 89;
    m_index = 90;
    sCmpz( 2, 35);
    m_index = 91;
    dPhi( 89, 56);
    m_index = 92;
    m_index = 93;
    sCmpz( 2, 40);
    m_index = 94;
    dPhi( 92, 91);
    m_index = 95;
    m_index = 96;
    sCmpz( 2, 44);
    m_index = 97;
    dPhi( 95, 94);
    m_index = 98;
    sCmpz( 2, 5);
    m_index = 99;
    dPhi( 97, 88);
    m_index = 100;
    dMult( 99, 84);
    m_index = 101;
    dAdd( 48, 100);
    m_index = 102;
    dAdd( 101, 87);
    m_index = 103;
    sCopy( 0, 396);
    m_index = 104;
    m_index = 105;
    m_index = 106;
    dAdd( 105, 17);
    m_index = 107;
    dSub( 30, 106);
    m_index = 108;
    sCmpz( 2, 107);
    m_index = 109;
    dPhi( 104, 3);
    m_index = 110;
    m_index = 111;
    dAdd( 110, 17);
    m_index = 112;
    dSub( 30, 111);
    m_index = 113;
    sCmpz( 2, 112);
    m_index = 114;
    dPhi( 27, 109);
    m_index = 115;
    m_index = 116;
    dAdd( 115, 17);
    m_index = 117;
    dSub( 30, 116);
    m_index = 118;
    sCmpz( 2, 117);
    m_index = 119;
    dPhi( 38, 114);
    m_index = 120;
    m_index = 121;
    dAdd( 120, 17);
    m_index = 122;
    dSub( 30, 121);
    m_index = 123;
    sCmpz( 2, 122);
    m_index = 124;
    dPhi( 27, 119);
    m_index = 125;
    dSub( 30, 105);
    m_index = 126;
    sCmpz( 2, 125);
    m_index = 127;
    dPhi( 104, 124);
    m_index = 128;
    dSub( 30, 110);
    m_index = 129;
    sCmpz( 2, 128);
    m_index = 130;
    dPhi( 27, 127);
    m_index = 131;
    dSub( 30, 115);
    m_index = 132;
    sCmpz( 2, 131);
    m_index = 133;
    dPhi( 38, 130);
    m_index = 134;
    dSub( 30, 120);
    m_index = 135;
    sCmpz( 2, 134);
    m_index = 136;
    dPhi( 27, 133);
    m_index = 137;
    sCmpz( 2, 5);
    m_index = 138;
    dPhi( 136, 103);
    m_index = 139;
    dSub( 51, 138);
    m_index = 140;
    dMult( 139, 139);
    m_index = 141;
    sCopy( 0, 395);
    m_index = 142;
    sCmpz( 2, 107);
    m_index = 143;
    dPhi( 27, 3);
    m_index = 144;
    sCmpz( 2, 112);
    m_index = 145;
    dPhi( 28, 143);
    m_index = 146;
    m_index = 147;
    sCmpz( 2, 117);
    m_index = 148;
    dPhi( 146, 145);
    m_index = 149;
    m_index = 150;
    sCmpz( 2, 122);
    m_index = 151;
    dPhi( 149, 148);
    m_index = 152;
    sCmpz( 2, 125);
    m_index = 153;
    dPhi( 27, 151);
    m_index = 154;
    sCmpz( 2, 128);
    m_index = 155;
    dPhi( 28, 153);
    m_index = 156;
    sCmpz( 2, 131);
    m_index = 157;
    dPhi( 146, 155);
    m_index = 158;
    sCmpz( 2, 134);
    m_index = 159;
    dPhi( 149, 157);
    m_index = 160;
    sCmpz( 2, 5);
    m_index = 161;
    dPhi( 159, 141);
    m_index = 162;
    dSub( 69, 161);
    m_index = 163;
    dMult( 162, 162);
    m_index = 164;
    dAdd( 163, 140);
    m_index = 165;
    sSqrt( 0, 164);
    m_index = 166;
    dMult( 165, 165);
    m_index = 167;
    dMult( 166, 165);
    m_index = 168;
    dDiv( 81, 167);
    m_index = 169;
    dMult( 139, 168);
    m_index = 170;
    sInput( 0, 3);
    m_index = 171;
    dDiv( 170, 84);
    m_index = 172;
    dAdd( 171, 169);
    m_index = 173;
    dMult( 172, 86);
    m_index = 174;
    sCopy( 0, 399);
    m_index = 175;
    m_index = 176;
    sCmpz( 2, 112);
    m_index = 177;
    dPhi( 175, 143);
    m_index = 178;
    m_index = 179;
    sCmpz( 2, 117);
    m_index = 180;
    dPhi( 178, 177);
    m_index = 181;
    m_index = 182;
    sCmpz( 2, 122);
    m_index = 183;
    dPhi( 181, 180);
    m_index = 184;
    sCmpz( 2, 125);
    m_index = 185;
    dPhi( 27, 183);
    m_index = 186;
    sCmpz( 2, 128);
    m_index = 187;
    dPhi( 175, 185);
    m_index = 188;
    sCmpz( 2, 131);
    m_index = 189;
    dPhi( 178, 187);
    m_index = 190;
    sCmpz( 2, 134);
    m_index = 191;
    dPhi( 181, 189);
    m_index = 192;
    sCmpz( 2, 5);
    m_index = 193;
    dPhi( 191, 174);
    m_index = 194;
    dMult( 193, 84);
    m_index = 195;
    dAdd( 138, 194);
    m_index = 196;
    dAdd( 195, 173);
    m_index = 197;
    dSub( 196, 102);
    m_index = 198;
    dMult( 197, 197);
    m_index = 199;
    dMult( 70, 82);
    m_index = 200;
    dMult( 199, 86);
    m_index = 201;
    sCopy( 0, 403);
    m_index = 202;
    m_index = 203;
    sCmpz( 2, 31);
    m_index = 204;
    dPhi( 202, 3);
    m_index = 205;
    sCmpz( 2, 35);
    m_index = 206;
    dPhi( 27, 204);
    m_index = 207;
    m_index = 208;
    sCmpz( 2, 40);
    m_index = 209;
    dPhi( 207, 206);
    m_index = 210;
    sCmpz( 2, 44);
    m_index = 211;
    dPhi( 27, 209);
    m_index = 212;
    sCmpz( 2, 5);
    m_index = 213;
    dPhi( 211, 201);
    m_index = 214;
    dMult( 213, 84);
    m_index = 215;
    dAdd( 66, 214);
    m_index = 216;
    dAdd( 215, 200);
    m_index = 217;
    dMult( 162, 168);
    m_index = 218;
    sInput( 0, 2);
    m_index = 219;
    dDiv( 218, 84);
    m_index = 220;
    dAdd( 219, 217);
    m_index = 221;
    dMult( 220, 86);
    m_index = 222;
    sCopy( 0, 398);
    m_index = 223;
    m_index = 224;
    sCmpz( 2, 107);
    m_index = 225;
    dPhi( 223, 3);
    m_index = 226;
    sCmpz( 2, 112);
    m_index = 227;
    dPhi( 27, 225);
    m_index = 228;
    sCmpz( 2, 117);
    m_index = 229;
    dPhi( 178, 227);
    m_index = 230;
    sCmpz( 2, 122);
    m_index = 231;
    dPhi( 27, 229);
    m_index = 232;
    sCmpz( 2, 125);
    m_index = 233;
    dPhi( 223, 231);
    m_index = 234;
    sCmpz( 2, 128);
    m_index = 235;
    dPhi( 27, 233);
    m_index = 236;
    sCmpz( 2, 131);
    m_index = 237;
    dPhi( 178, 235);
    m_index = 238;
    sCmpz( 2, 134);
    m_index = 239;
    dPhi( 27, 237);
    m_index = 240;
    sCmpz( 2, 5);
    m_index = 241;
    dPhi( 239, 222);
    m_index = 242;
    dMult( 241, 84);
    m_index = 243;
    dAdd( 161, 242);
    m_index = 244;
    dAdd( 243, 221);
    m_index = 245;
    dSub( 244, 216);
    m_index = 246;
    dMult( 245, 245);
    m_index = 247;
    dAdd( 246, 198);
    m_index = 248;
    sSqrt( 0, 247);
    m_index = 249;
    dAdd( 25, 248);
    m_index = 250;
    dMult( 171, 171);
    m_index = 251;
    dMult( 219, 219);
    m_index = 252;
    dAdd( 251, 250);
    m_index = 253;
    sSqrt( 0, 252);
    m_index = 254;
    dSub( 253, 3);
    m_index = 255;
    sCmpz( 2, 254);
    m_index = 256;
    dPhi( 249, 3);
    m_index = 257;
    dSub( 248, 17);
    m_index = 258;
    sCmpz( 0, 257);
    m_index = 259;
    dPhi( 256, 3);
    m_index = 260;
    dSub( 51, 102);
    m_index = 261;
    dMult( 260, 260);
    m_index = 262;
    dSub( 69, 216);
    m_index = 263;
    dMult( 262, 262);
    m_index = 264;
    dAdd( 263, 261);
    m_index = 265;
    sSqrt( 0, 264);
    m_index = 266;
    dMult( 265, 265);
    m_index = 267;
    dMult( 266, 265);
    m_index = 268;
    dDiv( 81, 267);
    m_index = 269;
    dMult( 260, 268);
    m_index = 270;
    dAdd( 269, 83);
    m_index = 271;
    dDiv( 270, 15);
    m_index = 272;
    dMult( 271, 84);
    m_index = 273;
    dAdd( 99, 272);
    m_index = 274;
    dMult( 262, 268);
    m_index = 275;
    dAdd( 274, 199);
    m_index = 276;
    dDiv( 275, 15);
    m_index = 277;
    dMult( 276, 84);
    m_index = 278;
    dAdd( 213, 277);
    m_index = 279;
    sCopy( 0, 402);
    m_index = 280;
    m_index = 281;
    sCmpz( 2, 31);
    m_index = 282;
    dPhi( 280, 3);
    m_index = 283;
    sCmpz( 2, 35);
    m_index = 284;
    dPhi( 280, 282);
    m_index = 285;
    sCmpz( 2, 40);
    m_index = 286;
    dPhi( 280, 284);
    m_index = 287;
    sCmpz( 2, 44);
    m_index = 288;
    dPhi( 280, 286);
    m_index = 289;
    sCmpz( 2, 5);
    m_index = 290;
    dPhi( 288, 279);
    m_index = 291;
    dSub( 51, 196);
    m_index = 292;
    dMult( 291, 291);
    m_index = 293;
    dSub( 69, 244);
    m_index = 294;
    dMult( 293, 293);
    m_index = 295;
    dAdd( 294, 292);
    m_index = 296;
    sSqrt( 0, 295);
    m_index = 297;
    dMult( 296, 296);
    m_index = 298;
    dMult( 297, 296);
    m_index = 299;
    dDiv( 81, 298);
    m_index = 300;
    dMult( 291, 299);
    m_index = 301;
    dAdd( 300, 169);
    m_index = 302;
    dDiv( 301, 15);
    m_index = 303;
    dAdd( 171, 302);
    m_index = 304;
    dMult( 303, 84);
    m_index = 305;
    dAdd( 193, 304);
    m_index = 306;
    dMult( 293, 299);
    m_index = 307;
    dAdd( 306, 217);
    m_index = 308;
    dDiv( 307, 15);
    m_index = 309;
    dAdd( 219, 308);
    m_index = 310;
    dMult( 309, 84);
    m_index = 311;
    dAdd( 241, 310);
    m_index = 312;
    sCopy( 0, 397);
    m_index = 313;
    sCmpz( 2, 107);
    m_index = 314;
    dPhi( 280, 3);
    m_index = 315;
    sCmpz( 2, 112);
    m_index = 316;
    dPhi( 280, 314);
    m_index = 317;
    sCmpz( 2, 117);
    m_index = 318;
    dPhi( 280, 316);
    m_index = 319;
    sCmpz( 2, 122);
    m_index = 320;
    dPhi( 280, 318);
    m_index = 321;
    sCmpz( 2, 125);
    m_index = 322;
    dPhi( 280, 320);
    m_index = 323;
    sCmpz( 2, 128);
    m_index = 324;
    dPhi( 280, 322);
    m_index = 325;
    sCmpz( 2, 131);
    m_index = 326;
    dPhi( 280, 324);
    m_index = 327;
    sCmpz( 2, 134);
    m_index = 328;
    dPhi( 280, 326);
    m_index = 329;
    sCmpz( 2, 5);
    m_index = 330;
    dPhi( 328, 312);
    m_index = 331;
    sCopy( 0, 394);
    m_index = 332;
    sCmpz( 2, 5);
    m_index = 333;
    dPhi( 3, 331);
    m_index = 334;
    sCopy( 0, 393);
    m_index = 335;
    sCmpz( 2, 5);
    m_index = 336;
    dPhi( 3, 334);
    m_index = 337;
    dAdd( 4, 0);
    m_index = 338;
    dSub( 102, 196);
    m_index = 339;
    dSub( 216, 244);
    m_index = 340;
    sCopy( 0, 405);
    m_index = 341;
    dAdd( 340, 0);
    m_index = 342;
    sCmpz( 2, 254);
    m_index = 343;
    dPhi( 341, 3);
    m_index = 344;
    sCmpz( 0, 257);
    m_index = 345;
    dPhi( 343, 3);
    m_index = 346;
    sCopy( 0, 407);
    m_index = 347;
    m_index = 348;
    sCmpz( 2, 5);
    m_index = 349;
    dPhi( 347, 346);
    m_index = 350;
    dMult( 253, 84);
    m_index = 351;
    dSub( 349, 350);
    m_index = 352;
    m_index = 353;
    m_index = 354;
    m_index = 355;
    dDiv( 351, 347);
    m_index = 356;
    dMult( 355, 354);
    m_index = 357;
    dAdd( 7, 356);
    m_index = 358;
    dAdd( 357, 353);
    m_index = 359;
    dMult( 358, 352);
    m_index = 360;
    m_index = 361;
    dDiv( 360, 84);
    m_index = 362;
    dSub( 361, 345);
    m_index = 363;
    sCmpz( 0, 362);
    m_index = 364;
    dPhi( 359, 3);
    m_index = 365;
    dSub( 351, 3);
    m_index = 366;
    dSub( 382, 0);
    m_index = 367;
    sCmpz( 0, 365);
    m_index = 368;
    dPhi( 366, 364);
    m_index = 369;
    dSub( 347, 350);
    m_index = 370;
    sCmpz( 0, 369);
    m_index = 371;
    dPhi( 366, 368);
    m_index = 372;
    m_index = 373;
    dSub( 196, 51);
    m_index = 374;
    dMult( 373, 373);
    m_index = 375;
    dSub( 244, 69);
    m_index = 376;
    dMult( 375, 375);
    m_index = 377;
    dAdd( 376, 374);
    m_index = 378;
    sSqrt( 0, 377);
    m_index = 379;
    dSub( 378, 372);
    m_index = 380;
    sCmpz( 0, 379);
    m_index = 381;
    dPhi( 366, 371);
    m_index = 382;
    m_index = 383;
    dOutput( 0, 381);
    m_index = 384;
    dOutput( 1, 351);
    m_index = 385;
    dOutput( 2, 293);
    m_index = 386;
    dOutput( 3, 291);
    m_index = 387;
    dOutput( 4, 339);
    m_index = 388;
    dOutput( 5, 338);
    m_index = 389;
    sCopy( 0, 337);
    m_index = 390;
    sCopy( 0, 69);
    m_index = 391;
    sCopy( 0, 51);
    m_index = 392;
    sCopy( 0, 80);
    m_index = 393;
    sCopy( 0, 336);
    m_index = 394;
    sCopy( 0, 333);
    m_index = 395;
    sCopy( 0, 244);
    m_index = 396;
    sCopy( 0, 196);
    m_index = 397;
    sCopy( 0, 330);
    m_index = 398;
    sCopy( 0, 311);
    m_index = 399;
    sCopy( 0, 305);
    m_index = 400;
    sCopy( 0, 216);
    m_index = 401;
    sCopy( 0, 102);
    m_index = 402;
    sCopy( 0, 290);
    m_index = 403;
    sCopy( 0, 278);
    m_index = 404;
    sCopy( 0, 273);
    m_index = 405;
    sCopy( 0, 345);
    m_index = 406;
    sCopy( 0, 259);
    m_index = 407;
    sCopy( 0, 351);
    m_index = 408;
    sCopy( 0, 24);
    m_index = 409;
    sCopy( 0, 22);
    m_index = 410;
    sCopy( 0, 14);
    statsOutput();
    m_count++;
}

std::string OVMBin3::getStatusString()
{
    static char buff[1024];
    double
            score = m_outReg[OP_SCORE],
            fuel = m_outReg[OP_FUEL],
            sx = m_outReg[OP_SPACE_X],
            sy = m_outReg[OP_SPACE_Y],
            sxt = m_outReg[OP_TARGET_X],
            syt = m_outReg[OP_TARGET_Y];
    double radiusCurrent = sqrt(sx*sx + sy*sy);
    double radiusCurrentTarget = sqrt(sxt*sxt + syt*syt);
    double distance = sqrt(pow(sx-sxt,2)+pow(sy-syt,2));
    sprintf(buff, "Step: %4d Score: %4.1f Fuel: %4.1f sx= %8.1f sy= %8.1f sxt= %8.1f syt= %8.1f sr = %8.1f srt = %8.1f distance = %.1f\n",
         m_count,
         score,
         fuel,
         sx,
         sy,
         sxt,
         syt,
         radiusCurrent,
         radiusCurrentTarget,
         distance);
    return std::string(buff);
}
